#ifndef __SV2_VIDEO_STREAMER__
#define __SV2_VIDEO_STREAMER__

#include <opencv2/opencv.hpp>
#include <opencv2/aruco.hpp>
#include <opencv2/tracking.hpp>
#include <string>
#include <chrono>
#include "sv2_video_base.h"

class BsPushStreamer;

namespace sv2
{
  class VideoStreamerGstreamerImpl;

  class VideoStreamer : public VideoStreamerBase
  {
  public:
    VideoStreamer();
    ~VideoStreamer();

  protected:
    bool setupImpl();
    bool isOpenedImpl();
    void writeImpl(cv::Mat img_);
    void releaseImpl();

    VideoStreamerGstreamerImpl *_gstreamer_impl;
    BsPushStreamer *_ffmpeg_impl;
  };

}
#endif
